package main

/**
case 表达式不能重复，但是如果 case 为布尔值，则可以重复。
*/
import "fmt"

func main() {
	var a int
	fmt.Print("please input a:")
	fmt.Scanf("%d", &a)
	switch a := 10; a {
	case 1:
		fmt.Println("a=1")
		// 不写默认带break
		fallthrough // 不跳出switch语句，后面无条件执行
	case 2:
		fmt.Println("b=2")
	case 10:
		fmt.Println("a=10")
	default:
		fmt.Println("don't known a")
	}

	// 可以没有条件
	score := 80
	switch {
	case score < 90:
		fmt.Println("优秀")
	case a == 10:
		fmt.Println("a=10")
	case score < 80:
		fmt.Println("一般")
	}
	//case 表达式不能重复，但是如果 case 为布尔值，则可以重复。
	b := false
	switch false {
	case b:
		fmt.Println("123")
	case b:
		fmt.Println("456")
	}

	// 一个分支可以有多个值，多个 case 值中间使用英文逗号分隔。
	num := 5
	switch num {
	case 1, 3, 5, 7, 9:
		fmt.Println("num是奇数")
	case 2, 4, 6, 8, 10:
		fmt.Println("num是偶数")
	default:
		fmt.Println("num：", num)
	}

	//fallthrough会强制执行后面的一条case语句。使用 fallthrough 来执行多个 case，也可以使用 break 来终止。
	num = 1
	switch num {
	case 1:
		fmt.Println(1)
		if num == 1 {
			break
		}
		fallthrough
	case 2:
		fmt.Println(2)
	case 3:
		fmt.Println(3)
	default:
		fmt.Println("...")
	}
}
